#ifndef GRAPH_EDGE_H
#define GRAPH_EDGE_H

namespace core
{
class IEdgeData;
class Node;

class Edge
{
public:
    static Edge* create(Node* source, Node* destination,
        IEdgeData* data)
    {
        return new Edge(source, destination, data);
    }
    ~Edge();

    const IEdgeData* getData() const;

    Node* getSource() const;
    Node* getDestination() const;

private:
    Edge(Node* source, Node* destination, IEdgeData* data);

private:
    IEdgeData* m_data;

    Node* m_source;
    Node* m_destination;
};

}

#endif
